package cn.sofwin.web.blog.service.impl;

import cn.sofwin.core.dao.BaseDao;
import cn.sofwin.core.service.impl.BaseServiceImpl;
import cn.sofwin.web.blog.dao.ArticleDao;
import cn.sofwin.web.blog.entity.Article;
import cn.sofwin.web.blog.entity.User;
import cn.sofwin.web.blog.service.ArticleService;

import java.util.Date;

/**
 * 文章服务接口的实现
 * @author ZX
 * @version 1.0
 */
public class ArticleServiceImpl extends BaseServiceImpl<Article> implements ArticleService
{
    /** 文章数据访问对象 */
    private ArticleDao articleDao = new ArticleDao();

    /** 私有的实例对象，用户实现单例模式 */
    private static ArticleServiceImpl articleService = new ArticleServiceImpl();

    /**
     * 将构造方法设为私有，用于实现单例模式
     */
    private ArticleServiceImpl(){
        super();
    }

    /**
     * 对外提供的静态方法，用于获取服务实例
     * @return
     */
    public static ArticleService getInstance(){
        return articleService;
    }


    @Override
    protected BaseDao<Article> getDao() {
        return articleDao;
    }

    @Override
    public void publish(User user, String title, String summary, String content) {
        Article article = new Article();
        article.setUser(user);
        article.setTitle(title);
        article.setSummary(summary);
        article.setContent(content);
        article.setAddTime(new Date());

        articleDao.insert(article);
    }

    @Override
    public void edit(User user, String id, String title, String summary, String content) {
        Integer aid = Integer.valueOf(id);
        Article article = articleDao.get(aid);

        // 无效ID，终止更新操作
        if(article == null){
            return;
        }
        // 判断文章是否为当前用户发表，如果不是，则终止更新操作
        if(!user.getId().equals( article.getUser().getId() )){
            return;
        }
        // 所有校验通过，开始更新，不允许修改文章标题
        article.setSummary(summary);
        article.setContent(content);
        articleDao.update(article);
    }
    @Override
    public void addReadTotal(String id) {
        articleDao.addReadTotal(id);
    }

    /**
     * 重写父类的方法，实现伪删除
     * @param id
     */
    @Override
    public void remove(Integer id){
        articleDao.remove(id);
    }
}
